package ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.representacion;

import java.awt.CardLayout;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.PanelVista;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Continua;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Escalonada;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Representacion;
import ar.uba.fi.taller2.cmmiassistant.vista.Estado;
import ar.uba.fi.taller2.cmmiassistant.vista.Vista;

public class PanelMostrandoRepresentacion extends PanelVista {

    private static final long serialVersionUID = 6347875472481390480L;
    private JPanel panelNiveles;
    private MostrandoNivel mostrandoNivel;
    private MostrandoNivelesCapacidad mostrandoNivelesCapacidad;
    private MostrandoNivelMadurez mostrandoNivelMadurez;
    private CardLayout layoutPanelNiveles;

    public PanelMostrandoRepresentacion(Vista contexto) {

        super(contexto);
        this.initialize();
    }

    private void setMostrandoNivel(MostrandoNivel seleccionandoNivel) {

        this.mostrandoNivel = seleccionandoNivel;
        this.getMostrandoNivel().activar();
        this.getLayoutPanelNiveles().show(this.getPanelNiveles(),
                this.getMostrandoNivel().getEstado().getName());
    }

    private MostrandoNivel getMostrandoNivel() {

        return this.mostrandoNivel;
    }

    private void initialize() {

        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(this.getPanelNiveles());
    }

    private JPanel getPanelNiveles() {

        if (this.panelNiveles == null) {

            this.panelNiveles = new JPanel();
            this.panelNiveles.setLayout(this.getLayoutPanelNiveles());
            this.addToPanelNiveles(this.getMostrandoNivelesCapacidad(),
                    true);
            this.addToPanelNiveles(this.getMostrandoNivelMadurez(), true);
        }

        return this.panelNiveles;
    }

    private CardLayout getLayoutPanelNiveles() {

        if (this.layoutPanelNiveles == null) {

            this.layoutPanelNiveles = new CardLayout();
        }
        return this.layoutPanelNiveles;
    }

    private void addToPanelNiveles(PanelVista panelVista, boolean useScrollPane) {

        this.panelNiveles.add(useScrollPane ? new JScrollPane(panelVista)
                : panelVista, panelVista.getEstado().getName());
    }

    private MostrandoNivelMadurez getMostrandoNivelMadurez() {

        if (this.mostrandoNivelMadurez == null) {

            this.mostrandoNivelMadurez = new MostrandoNivelMadurez(this);

        }

        return this.mostrandoNivelMadurez;
    }

    private MostrandoNivelesCapacidad getMostrandoNivelesCapacidad() {

        if (this.mostrandoNivelesCapacidad == null) {

            this.mostrandoNivelesCapacidad = new MostrandoNivelesCapacidad(
                    this);

        }

        return this.mostrandoNivelesCapacidad;
    }

    public void setRepresentacion(Representacion representacion) {

        if (representacion instanceof Continua) {

            this.setMostrandoNivel(this.getMostrandoNivelesCapacidad());
            
        }

        if (representacion instanceof Escalonada) {

            this.setMostrandoNivel(this.getMostrandoNivelMadurez());
            
        }
    }

    public void setControlador(Controlador controlador) {

        super.setControlador(controlador);

        this.getMostrandoNivelesCapacidad().setControlador(controlador);
        this.getMostrandoNivelMadurez().setControlador(controlador);
    }

    
    
    public Estado getEstado() {

        return Estado.MOSTRANDO_REPRESENTACION;
    }

}
